package com.breaktian.assemble.router;

import android.content.Context;

import com.breaktian.assemble.utils.LogUtil;
import com.breaktian.assemble.router.parse.RouterParser;
import com.breaktian.assemble.router.parse.RouterXml;

import java.util.List;


/**
 * Created by keke.tian on 2017/7/26.
 * 路由框架 入口
 * 支持intent，http，schema三种跳转
 * 路由表支持xml配置，可自定义,支持多路径
 * 有拦截器
 * 同时支持反射和隐式意图
 * 支持结果回调
 * 支持参数传递
 * 链式调用
 * 参数传递支持url模式
 * 支持配置多个webview 实现指定非默认的webview启动url
 *
 */
public class VpRouter extends AbsRouter {

    /**
     * 静态内部类只有被用到时候被加载，而且只允许一个线程加载（jvm原理）
     * */
    static class InstanceHolder{
        static final VpRouter instance = new VpRouter();
    }

    public static VpRouter get(){
        return InstanceHolder.instance;
    }

    public VpRouter(){
    }

    private static List<String> mSchemaPrefixList;
    private static String mDefaultWebviewSchema;

    /**
     * 加载路由表
     * @param context 上下文
     * @param assetFile 路由表 存放在asset目录下
     * */
    public static void load(Context context,String assetFile){
        try {
            RouterXml routerXml = RouterParser.parse(context,assetFile);
            if(routerXml!=null){
                mSchemaPrefixList = routerXml.getSchemaPrefixList();
                mDefaultWebviewSchema = routerXml.getDefaultWebviewSchema();
                //导入路由表
                LogUtil.d("导入路由表。。。");
                RouterTable.get().importRouterTable(routerXml.getRuleList());
//                for (Rule rule:routerXml.getRuleList()) {
//                    LogUtil.d(rule.toString());
//                }
            }
        }catch (Exception e){
            e.printStackTrace();
            LogUtil.e("加载xml出错");
        }
    }

    @Override
    List<String> getSchemaPrefixList() {
        return mSchemaPrefixList;
    }

    @Override
    String getDefaultWebviewSchema() {
        return mDefaultWebviewSchema;
    }

    @Override
    VpRouter getInstance() {
        return InstanceHolder.instance;
    }


}
